// 此vm参数为页面的实例，可以通过它引用vuex中的变量
import getConfigUrl from "./config";

const baseUrlObj = getConfigUrl();
//import { useUserStore } from "@/stores/index";
console.log(baseUrlObj.baseUrl,'------baseUrlObj.baseUrl')
export const Request= (pinia) => {
    const userStore = useUserStore(pinia);
    // 初始化请求配置
    uni.$uv.http.setConfig((config) => {
        /* config 为默认全局配置*/
        config.header = {
            "Content-Type": "application/json;charset=UTF-8",
        };
        config.timeout = 50000;
        config.baseURL = baseUrlObj.baseUrl; /* 根域名 */ 
		return config
    });
    // 请求拦截
    uni.$uv.http.interceptors.request.use(
        (config) => {
            // 可使用async await 做异步操作
            if (config.custom?.baseUrl) {
                config.baseURL = config.custom.baseUrl;
            }
            const token = userStore.token || uni.getStorageSync('token') || '';
            if (token) {
            	config.header['Authorization'] =`Bearer ${token}`;
            }
			console.log(
			    userStore.token,
			    "------------------config----777777---vm---999-",
			    config
			);
            return config;
        },
        (config) => {
            // 可使用async await 做异步操作
            return Promise.reject(config);
        }
    );

    // 响应拦截
    uni.$uv.http.interceptors.response.use(
        (response) => {
            /* 对响应成功做点什么 可使用async await 做异步操作*/
            console.log("正常响应response---", response);
            const custom = response.config?.custom || {};
            const data = response.data || {};
            const base = response.config?.baseURL;
            if (base == baseUrlObj.baseUrl) {
                //针对baseUrl为http://develop.api.myroki.com
                const theader = response.config?.header || {};
                if (data.code == 200) {
                    return data;
                } else if (data.code == 401) {
                    //登录过期---清空登录态
                    //vm.$store.dispatch("user/resetUser");
                    return Promise.reject(data);
                } else if (custom?.toast !== false) {
                    //uni.$u.toast(data.msg || data.message || "未知错误");
                    return Promise.reject(data);
                }
            }
            // if (base == baseUrlObj.rewardBaseUrl) {
            // 	if (data?.code == 200) {
            // 		return data;
            // 	} else {
            // 		// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
            // 		if (custom?.toast !== false) {
            // 			uni.$u.toast(data.msg || data.message || "未知错误");
            // 		}
            // 		// 如果需要catch返回，则进行reject
            // 		if (custom?.catch) {
            // 			return Promise.reject(data);
            // 		} else {
            // 			// 否则返回一个pending中的promise，请求不会进入catch中
            // 			return new Promise(() => {});
            // 		}
            // 	}
            // }
            return data.data === undefined ? {} : data.data;
        },
        (response) => {
            // 对响应错误做点什么 （statusCode !== 200）
            console.log("异常响应--response----", response);
            if (response?.data?.status == 401) {
                //登录过期---清空登录态
                //vm.$store.dispatch('user/resetUser');
                //重复调用
                // return repeatRequestFun(response.config)
                return Promise.reject(response);
            } else {
                return Promise.reject(response);
            }
        }
    );
};
 export const uploadFile=({api='/api/updateAvatar',filePath=""}={})=>{
	 return new Promise((resolve,reject)=>{
		 uni.uploadFile({
		   url:`${baseUrlObj.baseUrl}${api}`,// 开发者服务器的URL。
		   filePath,
		   name: 'file', // 必须填file。
		   header:{ 
		 	  'Authorization': `Bearer ${uni.getStorageSync('token')}`, // 添加 Token 到 header	  
		   },
		   formData: {},
		   success: (res) => { 
		 	    console.log('res----上传成功---.jpg--',res);
		 	  if(res.data){
		 		  try{
		 			const r=JSON.parse(res.data);
		 			console.log('res----上传成功---.jpg--',r,r.data.url);
					resolve({url:r.data.url});
		 			 
		 			   
		 		  }catch{
					  reject('error')
				  }  
		 	  }
	 
		   },
		   fail: err => {
		 	console.log(err);
		 	reject('error')
		   }
		 });
	 })
 }